package com.w7vm.menuweb.managerBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import com.w7vm.menuweb.entity.AcessoWeb;
import com.w7vm.menuweb.entity.RestauranteFilialWeb;
import com.w7vm.menuweb.entity.RestauranteSedeWeb;
import com.w7vm.menuweb.entity.UsuarioWeb;
import com.w7vm.menuweb.facade.AcessoFacade;
import com.w7vm.menuweb.facade.UserFacade;
import com.w7vm.menuweb.message.MessageFaces;
import com.w7vm.menuweb.utility.PropertiesLoaderImpl;

@ManagedBean
@ViewScoped
public class MinhaContaMB implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@EJB
	private AcessoFacade acessoEJB;
	
	@EJB
	private UserFacade usuarioEJB;
	
	
	private AcessoWeb acesso = new AcessoWeb();
	private UsuarioWeb userObj = new UsuarioWeb();
	private RestauranteSedeWeb restauranteObj = new RestauranteSedeWeb();
	private RestauranteFilialWeb filialObj = new RestauranteFilialWeb();
	private MessageFaces message = new MessageFaces();


	private LoginMB loginOjb = new LoginMB();

	private boolean statusAlterar = true;
	
	private List<AcessoWeb> usuarioAcessoL = null;
	private List<String> permissaoAcessoL = new ArrayList<String>();
	

	@PostConstruct
	public void init()
	{
		loadAcessoUsuarioLogado();
	}
	
	public void loadAcessoUsuarioLogado(){
		int idUsuario = (Integer) loginOjb.getSessao("IDUsuario");
		
		if(usuarioAcessoL == null){
			usuarioAcessoL = acessoEJB.findUsuarioAcessoByIDUsuario(idUsuario);
			
			for(AcessoWeb acessoWebL : usuarioAcessoL){
				userObj.setIdUsuarioWeb(acessoWebL.getUsuarioWeb().getIdUsuarioWeb());
				userObj.setNome(acessoWebL.getUsuarioWeb().getNome());
				userObj.setSobrenome(acessoWebL.getUsuarioWeb().getSobrenome());
				userObj.setMail(acessoWebL.getUsuarioWeb().getMail());
				userObj.setCpf(acessoWebL.getUsuarioWeb().getCpf());
				userObj.setUsername(acessoWebL.getUsuarioWeb().getUsername());
				userObj.setPassword(acessoWebL.getUsuarioWeb().getPassword());
				userObj.setDataInc(acessoWebL.getUsuarioWeb().getDataInc());
				userObj.setStatus(acessoWebL.getUsuarioWeb().getStatus());
				acesso.setPerfil(acessoWebL.getPerfil());
				
				if(acessoWebL.getAcessoFilial().equals("N")){
					String sede = acessoWebL.getRestauranteSedeWeb().getRestauranteSedeJuridicoWeb().getNomeFantasia();
					permissaoAcessoL.add(sede);
				}
				else if(acessoWebL.getAcessoFilial().equals("S")){
					String filial = acessoWebL.getRestauranteFilialWeb().getRestauranteFilialJuridicoWeb().getNomeFantasiaFilial();
					permissaoAcessoL.add(filial);
				}
			}
		}
	}

	public void alterarDadosUsuario(ActionEvent event){
		System.out.println("alterarDadosUsuario()");
		UsuarioWeb entidade = new UsuarioWeb();
		try{
			entidade = usuarioEJB.updateUsuario(userObj);
			if(!entidade.equals(null)){
				String msg = PropertiesLoaderImpl.getValor("tSuccessAltUsuario");
				message.sendInfoMessageToUser(userObj.getUsername(), msg);
				setStatusAlterar(true);
				FacesContext.getCurrentInstance().getExternalContext().redirect("../user/meusDados.jsf");
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			String msg = PropertiesLoaderImpl.getValor("tErrorAltUsuario");
			message.sendInfoMessageToUser(userObj.getUsername(), msg);
		}
	}
	
	
	public boolean getStatusAlterar() {
		return statusAlterar;
	}

	public void setStatusAlterar(boolean statusAlterar) {
		System.out.print("VAlor Booelan  "+ statusAlterar);
		this.statusAlterar = statusAlterar;
	}

	public List<AcessoWeb> getUsuarioAcessoL() {
		return usuarioAcessoL;
	}

	public void setUsuarioAcessoL(List<AcessoWeb> usuarioAcessoL) {
		this.usuarioAcessoL = usuarioAcessoL;
	}

	public AcessoWeb getAcesso() {
		return acesso;
	}

	public void setAcesso(AcessoWeb acesso) {
		this.acesso = acesso;
	}

	public UsuarioWeb getUserObj() {
		
		if(userObj == null){
			return userObj;
		}
		return userObj;
	}

	public void setUserObj(UsuarioWeb userObj) {
		this.userObj = userObj;
	}

	public List<String> getPermissaoAcessoL() {
		return permissaoAcessoL;
	}

	public void setPermissaoAcessoL(List<String> permissaoAcessoL) {
		this.permissaoAcessoL = permissaoAcessoL;
	}

	
}
